﻿using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Data.SqlClient;
using System.Configuration;
using System.Data;
namespace DataAccessLayer.Adapter
{
    public class clsKetNoiCSDL
    {
        SqlConnection con = new SqlConnection();
        string KetNoi = ConfigurationManager.ConnectionStrings["KetNoi"].ConnectionString;
        DataTable dt;
        public clsKetNoiCSDL()
        {
            con.ConnectionString = KetNoi;
            if (con.State == ConnectionState.Closed)
                con.Open();
        }
        public SqlConnection getConnect()
        {
            con.ConnectionString = KetNoi;
            if (con.State == ConnectionState.Closed)
                con.Open();
            return con;
        }
        /// <summary>
        /// Hàm trả về một bảng dữ liệu do người dùng chọn
        /// </summary>
        /// <param name="sql">Truyền vào một Stored để tiến hành truy vấn</param>
        /// <returns>Bảng dữ liệu</returns>
        public DataTable LoadDL(string sql)
        {
            try
            {
                if (con.State == ConnectionState.Closed)
                    con.Open();
                SqlCommand comd = new SqlCommand(sql,con);
                comd.CommandType = CommandType.StoredProcedure;
                SqlDataAdapter da = new SqlDataAdapter(comd);
                dt = new DataTable();
                da.Fill(dt);
            }
            catch (Exception)
            {

                throw;
            }
            finally
            {
                con.Close();
            }
            return dt;
        }
        /// <summary>
        /// Trả về một bảng dữ liệu
        /// </summary>
        /// <param name="sql">Truyền vào một Stored</param>
        /// <param name="name">Các tham số trong Stored</param>
        /// <param name="value">Các object mặc định bằng các tham số</param>
        /// <param name="Nparameter">Số lượng các tham số</param>
        /// <returns>Bảng dữ liệu!</returns>
        public DataTable LoadDL(string sql,string []name, object[] value, int Nparameter)
        {
            try
            {
                if (con.State == ConnectionState.Closed)
                    con.Open();
                SqlCommand comd = new SqlCommand(sql, con);
                comd.CommandType = CommandType.StoredProcedure;
                for (int i = 0; i < Nparameter; i++)
                {
                    comd.Parameters.AddWithValue(name[i],value[i]);
                }
                SqlDataAdapter da = new SqlDataAdapter(comd);
                dt = new DataTable();
                da.Fill(dt);
            }
            catch (Exception)
            {

                throw;
            }
            finally
            {
                con.Close();
            }
            return dt;
        }
        /// <summary>
        /// Hàm update dữ liệu hiện hành!
        /// </summary>
        /// <param name="sql">Truyền vào một Stored</param>
        /// <returns>Nếu thực thi thành công sẽ trả về 1</returns>
        public void UpdateDL(string sql)
        {
            try
            {
                if (con.State == ConnectionState.Closed)
                    con.Open();
                SqlCommand comd = new SqlCommand(sql, con);
                comd.CommandType = CommandType.StoredProcedure;
                comd.ExecuteNonQuery();
            }
            catch (Exception)
            {

                throw;
            }
            finally
            {
                con.Close();
            }
        }
        /// <summary>
        /// Hàm Update dữ liệu hiện hành!
        /// </summary>
        /// <param name="sql">Truyền vào một Stored</param>
        /// <param name="name">Mảng các tham số trong Stored</param>
        /// <param name="value">Mảng các đối tượng</param>
        /// <param name="Nparameter">Số lượng tham số</param>
        /// <returns>Trả về 1 nếu thực thi thành công!</returns>
        public void UpdateDL(string sql, string[] name, object[] value, int Nparameter)
        {
            try
            {
                if (con.State == ConnectionState.Closed)
                    con.Open();
                SqlCommand comd = new SqlCommand(sql, con);
                comd.CommandType = CommandType.StoredProcedure;
                for (int i = 0; i < Nparameter; i++)
                {
                    comd.Parameters.AddWithValue(name[i], value[i]);
                }
                comd.ExecuteNonQuery();
            }
            catch (Exception)
            {

                throw;
            }
            finally
            {
                con.Close();
            }
        }
        object kq;
        public object KTTrungMa(string sql)
        {
            try
            {
                if (con.State == ConnectionState.Closed)
                    con.Open();
                SqlCommand comd = new SqlCommand(sql, con);
                comd.CommandType = CommandType.StoredProcedure;
                kq= comd.ExecuteScalar();
            }
            catch (Exception)
            {

                throw;
            }
            finally
            {
                con.Close();
            }
            return kq;
        }
        public object KTTrungMa(string sql,string []name, object[]value,int N)
        {
            try
            {
                if (con.State == ConnectionState.Closed)
                    con.Open();
                SqlCommand comd = new SqlCommand(sql, con);
                comd.CommandType = CommandType.StoredProcedure;
                for (int i = 0; i < N; i++)
                {
                    comd.Parameters.AddWithValue(name[i],value[i]);
                }
                kq = comd.ExecuteScalar();
            }
            catch (Exception)
            {

                throw;
            }
            finally
            {
                con.Close();
            }
            return kq;
        }
    }
}
